package service

//
//import (
//	"demo/basic/config"
//	"demo/handler/model"
//	"demo/handler/request"
//	"github.com/gin-gonic/gin"
//	"github.com/gorilla/websocket"
//	"log"
//	"net/http"
//	"strconv"
//	"sync"
//)
//
//var (
//	upgrader = websocket.Upgrader{
//		ReadBufferSize:  1024,
//		WriteBufferSize: 1024,
//	}
//	clients = map[string]*Node{}
//	mu      sync.Mutex
//)
//
//type Node struct {
//	UserId string
//	Conn   *websocket.Conn
//	Data   chan []byte
//}
//
//func Chat(c *gin.Context) {
//	userId := c.Query("userId")
//	friendId := c.Query("friendId")
//	conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
//	if err != nil {
//		return
//	}
//	mu.Lock()
//	clients[userId] = &Node{
//		UserId: userId,
//		Conn:   conn,
//		Data:   make(chan []byte, 100),
//	}
//	mu.Unlock()
//	go func() {
//		rab := NewRabbitMQSimple("user." + userId)
//		defer rab.Destory()
//		rab.ConsumeSimple(clients[userId])
//	}()
//	go ReceiverMsg(clients[userId], friendId)
//	go SenderMsg(clients[userId])
//
//}
//func ReceiverMsg(myNode *Node, fid string) {
//	defer func() {
//		mu.Lock()
//		delete(clients, myNode.UserId)
//		myNode.Conn.Close()
//		close(myNode.Data)
//		mu.Unlock()
//	}()
//	userId, _ := strconv.Atoi(myNode.UserId)
//	friendId, _ := strconv.Atoi(fid)
//	var friend model.Friend
//	if err := friend.IsFriend(config.DB, userId, friendId); err != nil {
//		log.Printf("好友关系不存在,无法发送消息")
//		return
//	}
//	var black model.Black
//	if err := black.IsBlack(config.DB, userId, friendId); err == nil {
//		log.Printf("好友存在黑名单,无法发送消息")
//		return
//	}
//	rab := NewRabbitMQSimple("user." + fid)
//	defer rab.Destory()
//	for {
//		_, data, err := myNode.Conn.ReadMessage()
//		if err != nil {
//			return
//		}
//		message := model.Message{
//			UserId:   userId,
//			FriendId: friendId,
//			Content:  string(data),
//		}
//		err = message.SaveMessage(config.DB)
//		if err != nil {
//			log.Printf("消息存储失败")
//			return
//		}
//		mu.Lock()
//		friendNode, ok := clients[fid]
//		mu.Unlock()
//		if ok {
//			select {
//			case friendNode.Data <- data:
//			default:
//				log.Printf("好友消息队列已满，使用RabbitMQ发送")
//				rab.PublishSimple(string(data))
//			}
//		} else {
//			log.Printf("好友不在线，使用RabbitMQ发送消息")
//			rab.PublishSimple(string(data))
//		}
//	}
//}
//
//func SenderMsg(myNode *Node) {
//	for {
//		select {
//		case data := <-myNode.Data:
//			err := myNode.Conn.WriteMessage(websocket.TextMessage, data)
//			if err != nil {
//				return
//			}
//		}
//	}
//}
//
//func GetMessage(c *gin.Context) {
//	var form request.GetMessage
//	if err := c.ShouldBind(&form); err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{"code": 400, "msg": "参数错误"})
//		return
//	}
//	userId := c.GetFloat64("userId")
//	var message model.Message
//	list, err := message.GetMessage(config.DB, int(userId), form.FriendId)
//	if err != nil {
//		c.JSON(http.StatusBadRequest, gin.H{"code": 400, "msg": "查询聊天列表失败"})
//		return
//	}
//	c.JSON(http.StatusOK, gin.H{
//		"code": 200,
//		"msg":  "查询聊天列表成功",
//		"data": gin.H{
//			"list": list,
//		},
//	})
//	return
//}
